unit MeasurementUnitData;

{$mode objfpc}{$H+}

//========================================================================================
//
// Unit : MeasurementUnitData
//
// Description : This module provides
//
// Called By :
//
// Calls : HUtils : ValidAlphaCharacter
//
// Ver. : 1.00
//
// Date : 14 Nov 2016
//
//========================================================================================


interface

uses
  Classes, Db, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Buttons,
  StdCtrls,
  // Application units
  HUtils;

type

  tProcessType = (ptShow, ptInsert, ptEdit);

  { TfrmMeasurementUnitData }

  TfrmMeasurementUnitData = class(TForm)
    bbtOK: TBitBtn;
    bbtCancel: TBitBtn;
    edtUnitName: TEdit;
    edtUnitID: TEdit;
    StaticText1: TStaticText;
    StaticText2: TStaticText;
    procedure bbtCancelClick(Sender: TObject);
    procedure bbtOKClick(Sender: TObject);
    procedure edtUnitNameKeyPress(Sender: TObject; var Key: char);
    procedure FormShow(Sender: TObject);
  private
    { private declarations }
    fProcessType : tProcessType;
    fUnitID : integer;
    fUnitName : string;
  public
    { public declarations }
    function GetProcessType: tProcessType;
    procedure SetProcessType ( PType :tProcessType);
    function GetUnitID: integer;
    procedure SetUnitID (intID:integer);
    function GetUnitName: string;
    procedure SetUnitName (strName:string);
  published
    property ProcessType: tProcessType read GetProcessType write SetProcessType;
    property UnitID: integer read GetUnitID write SetUnitID;
    property UnitName: string read GetUnitName write SetUnitName;
    { published declarations }
  end;

var
  frmMeasurementUnitData: TfrmMeasurementUnitData;
//  vbytDataType : byte;

implementation

{$R *.lfm}

uses
  MeasurementUnitTable;

//========================================================================================
//          PRIVATE CONSTANTS
//========================================================================================

//========================================================================================
//          PUBLIC CONSTANTS
//========================================================================================

//========================================================================================
//          PRIVATE VARIABLES
//========================================================================================

//========================================================================================
//          PUBLIC VARIABLES
//========================================================================================

//========================================================================================
//          PRIVATE ROUTINES
//========================================================================================

//========================================================================================
//          PUBLIC ROUTINES
//========================================================================================
function TfrmMeasurementUnitData.GetProcessType: tProcessType;
begin
  Result := fProcessType;
end;// function TfrmMeasurementUnitData.GetProcessType

//----------------------------------------------------------------------------------------
procedure TfrmMeasurementUnitData.SetProcessType (PType:tProcessType);
begin
  fProcessType := PType;
end;// TfrmMeasurementUnitData.SetProcessType

//========================================================================================
function TfrmMeasurementUnitData.GetUnitID: integer;
begin
  Result := fUnitID;
end;// function TfrmMeasurementUnitData.GetUnitID

//----------------------------------------------------------------------------------------
procedure TfrmMeasurementUnitData.SetUnitID (intID:integer);
begin
  fUnitID := intID;
end;// procedure TfrmMeasurementUnitData.SetUnitID

//========================================================================================
function TfrmMeasurementUnitData.GetUnitName: string;
begin
  Result := fUnitName;
end;// function TfrmMeasurementUnitData

//----------------------------------------------------------------------------------------
procedure TfrmMeasurementUnitData.SetUnitName (strName:string);
begin
  fUnitName := strName;
end;// procedure TfrmMeasurementUnitData.SetUnitName

//========================================================================================
//          PROPERTY ROUTINES
//========================================================================================

//========================================================================================
//          MENU ROUTINES
//========================================================================================

//========================================================================================
//          COMMAND BUTTON ROUTINES
//========================================================================================
procedure TfrmMeasurementUnitData.bbtOKClick(Sender: TObject);
begin

  // Validate the Unit Name. If valid return both ID and Name to the Table. If not,
  // display an error message and remain in this module.

  if Length(edtUnitName.Text) < 2 then
  begin
    HUtils.ErrorMessageDlgOk ('Invalid Measurement Unit Name.',
                              'It must contain at least two characters.');
    edtUnitName.SetFocus;
    ModalResult := mrNone;
    Exit;
  end;// if Length(edtUnitName.Text) < 2

  frmMeasurementUnitTable.UnitID := StrToInt(edtUnitID.Text);
  frmMeasurementUnitTable.UnitName := edtUnitName.Text;

end;// procedure TfrmMeasurementUnitData.bbtOKClick

//========================================================================================
procedure TfrmMeasurementUnitData.bbtCancelClick(Sender: TObject);
begin

end;// procedure TfrmMeasurementUnitData.bbtCancelClick

//========================================================================================
//          CONTROL ROUTINES
//========================================================================================
procedure TfrmMeasurementUnitData.edtUnitNameKeyPress(Sender: TObject;
  var Key: char);
begin
  Key := HUtils.ValidAlphaCharacter(Key);
end;// procedure TfrmMeasurementUnitData.edtUnitNameKeyPress

//========================================================================================
//          FILE ROUTINES
//========================================================================================

//========================================================================================
//          FORM ROUTINES
//========================================================================================
procedure TfrmMeasurementUnitData.FormShow(Sender: TObject);
begin

  edtUnitID.ReadOnly := True;
  edtUnitID.Alignment := taCenter;
  edtUnitID.Text := IntToStr(UnitID);
  edtUnitName.Alignment := taCenter;
  edtUnitName.Text := UnitName;
  edtUnitName.MaxLength := 10;
  edtUnitName.SetFocus;

  case ProcessType of
    ptShow : begin
               frmMeasurementUnitData.Caption := 'Showing the Current Record';
             end;
    ptInsert : begin
               frmMeasurementUnitData.Caption := 'Inserting a New Record';
               end;
    ptEdit : begin
               frmMeasurementUnitData.Caption := 'Editing the Current Record';
             end;
  end;// case ProcessType

end;// procedure TfrmMeasurementUnitData.FormShow

//========================================================================================


{ TfrmMeasurementUnitData }

end.

